/*================================================================
*   Copyright (C) 2021 Sangfor Ltd. All rights reserved.
*   
*   文件名称：session.hpp
*   创 建 者：wudu
*   创建日期：2021年08月29日
*   描    述：
*
================================================================*/

#pragma once
#include <stdio.h>
#include <unistd.h>
#include <openssl/md5.h>
#include <iostream>
#include <string>

#include <jsoncpp/json/json.h>

using namespace std;

typedef enum UserStatus
{
    //不在线
    OFFLINE = 0,
    //在线状态
    ONLINE,
}USER_STATUS;


//针对与登录的用户创建的会话信息
class Session
{
    public:
        Session()
        {

        }


        Session(const Json::Value& v, int user_id)
        {
            user_id_ = user_id;

            real_str_ += v["email"].asString();
            real_str_ += v["password"].asString();

            us_status_ = ONLINE;
        }

        ~Session()
        {

        }


        bool CalcMd5()
        {
            MD5_CTX ctx;

            MD5_Init(&ctx);

            //int MD5_Update(MD5_CTX *c, const void *data, unsigned long len);
            if(MD5_Update(&ctx, real_str_.c_str(), real_str_.size()) != 1)
            {
                return false;
            }

            //int MD5_Final(unsigned char *md, MD5_CTX *c);
            //md ==> 16字节
            
            unsigned char md5[16] = { 0 };
            if(MD5_Final(md5, &ctx) != 1)
            {
                return false;
            }

            cout << "aaa: " <<  md5 << endl;
        }

        string& GetSessionID()
        {
            //1.计算sessionID
            CalcMd5();
            //2.返回session_id
        }

    private:
        string session_id_;

        //生成会话ID的源字符串
        string real_str_;

        int user_id_;

        UserStatus us_status_;
};

//保存多个用户对应的会话信息
class AllSessionInfo
{

};
